package com.gucheng.aigc.service;


import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.extension.service.IService;
import com.gucheng.aigc.model.dto.chart.ChartQueryRequest;
import com.gucheng.aigc.model.dto.chart.GenChartByAiRequest;
import com.gucheng.aigc.model.entity.Chart;
import com.gucheng.aigc.model.entity.User;
import com.gucheng.aigc.model.vo.BiResponse;
import org.springframework.web.multipart.MultipartFile;

/**
* @author 28221
* @description 针对表【chart(图表信息表)】的数据库操作Service
* @createDate 2024-07-17 21:30:35
*/
public interface ChartService extends IService<Chart> {
    /**
     * 获取查询包装类
     *
     * @param chartQueryRequest
     * @return
     */
    QueryWrapper<Chart> getQueryWrapper(ChartQueryRequest chartQueryRequest);

    /**
     * 智能分析（同步）
     *
     * @param multipartFile
     * @param genChartByAiRequest
     * @param loginUser
     * @return
     */
    BiResponse genChartByAi(MultipartFile multipartFile, GenChartByAiRequest genChartByAiRequest, User loginUser);

    /**
     * 处理异常 设置图标状态为失败
     *
     * @param chartId
     * @param execMessage
     */
    void handleChartUpdateError(long chartId, String execMessage);

    /**
     * 构建用户输入
     *
     * @param chart 图表对象
     * @return 用户输入字符串
     */
    String buildUserInput(Chart chart);

    /**
     * 构建用户输入
     *
     * @param goal
     * @param csvData
     * @param chartType
     * @return
     */
    String buildUserInput(String goal, String csvData, String chartType);

    /**
     * 智能分析（异步）
     *
     * @param multipartFile
     * @param genChartByAiRequest
     * @param loginUser
     * @return
     */
    BiResponse genChartByAiAsync(MultipartFile multipartFile, GenChartByAiRequest genChartByAiRequest, User loginUser);

    /**
     * 智能分析（异步 消息队列）
     *
     * @param multipartFile
     * @param genChartByAiRequest
     * @param loginUser
     * @return
     */
    BiResponse genChartByAiAsyncMq(MultipartFile multipartFile, GenChartByAiRequest genChartByAiRequest, User loginUser);

    /**
     * 校验ai生成的代码是否为json
     * 总共三次机会 如果三次都生成错误则抛出异常
     *
     * @param userInput
     * @return
     */
    String validAiResult(String userInput);

    /**
     * 校验文件是否合规
     *
     * @param multipartFile
     */
    void validFile(MultipartFile multipartFile);
}
